<?php
/**
 * 桥接模式
 *
 * 将抽象化与实现化脱耦，使得二者可以独立的变化。 
 */
//抽象化角色
class Abstraction{
	//实例化对象的引用
	protected $implementor;
	//修改抽象化角色
	public function __set($name,$value){
		$this->$name = $value;
	}
	//实现化角色的方法
	public function Operation()
	{
		$this->implementor->OprationImp();
	}
}
//实现化角色
abstract class Implementor
{
	abstract public function OperationImp();
}
//扩展抽象化角色
class RefinedAbstraction extends Abstraction{
	public function Operation()
	{
		$this->implementor->OperationImp();
	}
}
//具体化角色A
class ConcreteImplementorA extends Implementor{
	public function OperationImp()
	{
		echo "ConcreteImplementorA Operation\n"; 
	}
}
//具体化角色B
class ConcreteImplementorB extends Implementor{
	public function OperationImp()
	{
		echo "ConcreteImplementorB Operation\n";
	}
}

//获取扩展的抽象化对象
$abstraction = new RefinedAbstraction();
//获取具体化角色A
$abstraction->implementor = new ConcreteImplementorA();
$abstraction->Operation();
//获取具体化角色B
$abstraction->implementor = new ConcreteImplementorB();
$abstraction->Operation();
